// // function lasum(arr){
// //     var sum=function(){
// //         return arr.reduce(function(x,y){
// //             return x+y;
// //         });
// //     }
// //     return sum;
// // }
// // var f=lasum([1,2,3,4,5]);
// // console.log(f);//返回求和函数
// // console.log(f());//15

// // var f1=lasum([1,2,3,4,5]);
// // var f2=lasum([1,2,3,4,5]);
// // console.log(f1===f2);


// // function count(){
// //     var arr=[];
// //     for(var i=1;i<=3;i++){
        
// //             arr.push((function(n){
// //              return   function(){
// //                 return n*n;
// //             }
// //         })(i));
        
// //     }
// //     return arr;
// // }

// // var results =count();
// // var f1=results[0];
// // var f2=results[1];
// // var f3=results[2];

// // console.log(f1());
// // console.log(f2());
// // console.log(f3());
// // //每次循环，都创建了一个新的函数，然后，把创建的3个函数都添加到一个Array中返回

// // console.logf1(); // 16
// // console.logf2();  // 16
// // console.logf3(); // 16
// // //返回的函数引用了变量i，
// // //但它并非立刻执行等到3个函数都返回时，它们所引用的变量i已经变成了4


// function bb(inti){
//     var x=inti || 0;//传参inti,不传参数为0
//     return{
//         inc:function(){
//             x+=1;
//             return x;
//         }
//     }
// }
// var c1=bb();
// console.log(c1.inc());// 1
// console.log(c1.inc());// 2
// console.log(c1.inc());// 3
// //x的值被保留了

// var c2=bb(11);
// console.log(c2.inc());// 11
// console.log(c2.inc());// 12
// console.log(c2.inc());// 13


// function pow(n){
//     return function(x){
//         return Math.pow(x,n);//x的n次幂
//     }
// }
// var pow2=pow(2);
// var pow3=pow(3);//和上一个例子类似在调用函数时传入参数
// console.log(pow2(5));//25
// console.log(pow3(2));//8


 

// //箭头函数
// 命名一个变量来调用函数
// x => x * x
// x=>{
//     if(x>0){
//         return x*x;
//     }
//     else{
//         return -x*x;
//     }
// }


// //返回一个对象 要用()括起来
// var tt=x=>({
//     intt:x
// })
// console.log(tt("小小"));;


// //两个参数
// var ta=(x,y)=> x*x+y*y


// console.log(ta(2,4));

// //可变参数
// var bbr=(x,y,...rest)=>{
//     var i,sum=x+y;
//     for(i=0;i<rest.length;i++){
//         sum +=rest[i];
//     }
//     return sum;
// }
// console.log(bbr(2,5,4));
// //箭头函数
// //命名一个变量来调用函数
// x => x * x
// x=>{
//     if(x>0){
//         return x*x;
//     }
//     else{
//         return -x*x;
//     }
// }


// //返回一个对象 要用()括起来
// var tt=x=>({
//     intt:x
// })
// console.log(tt("小小"));;


// //两个参数
// var ta=(x,y)=> x*x+y*y


// console.log(ta(2,4));

// //可变参数
// var bbr=(x,y,...rest)=>{
//     var i,sum=x+y;
//     for(i=0;i<rest.length;i++){
//         sum +=rest[i];
//     }
//     return sum;
// }
// console.log(bbr(2,5,4));

// //this
// var obj={
//     birth:1990,
//     getage:function(){
//         var fn=()=>new Date().getFullYear()-this.birth;
//         return fn();
//     }

// };
// console.log(obj.getage());


// var obj = {
//     birth: 1990,
//     getAge: function (year) {
//         var b = this.birth; // 1990
//         var fn = (y) => y - this.birth; // this.birth仍是1990
//         return fn.call({birth:2000}, year);
//     }
// };
// obj.getAge(2015); // 25

//练习
var arr=[10,20,1,2];
arr.sort((x,y)=>{
    if(x<y){
        return -1;
    }
    else{
        return 1;
    }
});
console.log(arr);

function fib(max){
    var t,a=0,b=1,arr=[0,1];
    while(arr.length<max){
        [a,b]=[b,a+b];
        arr.push(b);
    }
    return arr;
}
console.log(fib(5)); // [0, 1, 1, 2, 3]
fib(10); // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]



//练习
function* next_id(){
    var current_id=0;
    while(true){
        current_id++;
        yield current_id ;
    }
}
// 测试:
var
    x,
    pass = true,
    g = next_id();
for (x = 1; x < 100; x ++) {
    if (g.next().value !== x) {
        pass = false;
        console.log('测试失败!');
        break;
    }
}
if (pass) {
    console.log('测试通过!');
}

 